home *** CD-ROM | disk | FTP | other *** search
/ Cream of the Crop 26 / Cream of the Crop 26.iso / os2 / octa209s.zip / octave-2.09 / libcruft / lapack / zlange.f < prev    next >
Text File  |  1996-07-19  |  4KB  |  147 lines

  1.       DOUBLE PRECISION FUNCTION ZLANGE( NORM, M, N, A, LDA, WORK )
  2. *
  3. *  -- LAPACK auxiliary routine (version 2.0) --
  4. *     Univ. of Tennessee, Univ. of California Berkeley, NAG Ltd.,
  5. *     Courant Institute, Argonne National Lab, and Rice University
  6. *     October 31, 1992
  7. *
  8. *     .. Scalar Arguments ..
  9.       CHARACTER          NORM
  10.       INTEGER            LDA, M, N
  11. *     ..
  12. *     .. Array Arguments ..
  13.       DOUBLE PRECISION   WORK( * )
  14.       COMPLEX*16         A( LDA, * )
  15. *     ..
  16. *
  17. *  Purpose
  18. *  =======
  19. *
  20. *  ZLANGE  returns the value of the one norm,  or the Frobenius norm, or
  21. *  the  infinity norm,  or the  element of  largest absolute value  of a
  22. *  complex matrix A.
  23. *
  24. *  Description
  25. *  ===========
  26. *
  27. *  ZLANGE returns the value
  28. *
  29. *     ZLANGE = ( max(abs(A(i,j))), NORM = 'M' or 'm'
  30. *              (
  31. *              ( norm1(A),         NORM = '1', 'O' or 'o'
  32. *              (
  33. *              ( normI(A),         NORM = 'I' or 'i'
  34. *              (
  35. *              ( normF(A),         NORM = 'F', 'f', 'E' or 'e'
  36. *
  37. *  where  norm1  denotes the  one norm of a matrix (maximum column sum),
  38. *  normI  denotes the  infinity norm  of a matrix  (maximum row sum) and
  39. *  normF  denotes the  Frobenius norm of a matrix (square root of sum of
  40. *  squares).  Note that  max(abs(A(i,j)))  is not a  matrix norm.
  41. *
  42. *  Arguments
  43. *  =========
  44. *
  45. *  NORM    (input) CHARACTER*1
  46. *          Specifies the value to be returned in ZLANGE as described
  47. *          above.
  48. *
  49. *  M       (input) INTEGER
  50. *          The number of rows of the matrix A.  M >= 0.  When M = 0,
  51. *          ZLANGE is set to zero.
  52. *
  53. *  N       (input) INTEGER
  54. *          The number of columns of the matrix A.  N >= 0.  When N = 0,
  55. *          ZLANGE is set to zero.
  56. *
  57. *  A       (input) COMPLEX*16 array, dimension (LDA,N)
  58. *          The m by n matrix A.
  59. *
  60. *  LDA     (input) INTEGER
  61. *          The leading dimension of the array A.  LDA >= max(M,1).
  62. *
  63. *  WORK    (workspace) DOUBLE PRECISION array, dimension (LWORK),
  64. *          where LWORK >= M when NORM = 'I'; otherwise, WORK is not
  65. *          referenced.
  66. *
  67. * =====================================================================
  68. *
  69. *     .. Parameters ..
  70.       DOUBLE PRECISION   ONE, ZERO
  71.       PARAMETER          ( ONE = 1.0D+0, ZERO = 0.0D+0 )
  72. *     ..
  73. *     .. Local Scalars ..
  74.       INTEGER            I, J
  75.       DOUBLE PRECISION   SCALE, SUM, VALUE
  76. *     ..
  77. *     .. External Functions ..
  78.       LOGICAL            LSAME
  79.       EXTERNAL           LSAME
  80. *     ..
  81. *     .. External Subroutines ..
  82.       EXTERNAL           ZLASSQ
  83. *     ..
  84. *     .. Intrinsic Functions ..
  85.       INTRINSIC          ABS, MAX, MIN, SQRT
  86. *     ..
  87. *     .. Executable Statements ..
  88. *
  89.       IF( MIN( M, N ).EQ.0 ) THEN
  90.          VALUE = ZERO
  91.       ELSE IF( LSAME( NORM, 'M' ) ) THEN
  92. *
  93. *        Find max(abs(A(i,j))).
  94. *
  95.          VALUE = ZERO
  96.          DO 20 J = 1, N
  97.             DO 10 I = 1, M
  98.                VALUE = MAX( VALUE, ABS( A( I, J ) ) )
  99.    10       CONTINUE
  100.    20    CONTINUE
  101.       ELSE IF( ( LSAME( NORM, 'O' ) ) .OR. ( NORM.EQ.'1' ) ) THEN
  102. *
  103. *        Find norm1(A).
  104. *
  105.          VALUE = ZERO
  106.          DO 40 J = 1, N
  107.             SUM = ZERO
  108.             DO 30 I = 1, M
  109.                SUM = SUM + ABS( A( I, J ) )
  110.    30       CONTINUE
  111.             VALUE = MAX( VALUE, SUM )
  112.    40    CONTINUE
  113.       ELSE IF( LSAME( NORM, 'I' ) ) THEN
  114. *
  115. *        Find normI(A).
  116. *
  117.          DO 50 I = 1, M
  118.             WORK( I ) = ZERO
  119.    50    CONTINUE
  120.          DO 70 J = 1, N
  121.             DO 60 I = 1, M
  122.                WORK( I ) = WORK( I ) + ABS( A( I, J ) )
  123.    60       CONTINUE
  124.    70    CONTINUE
  125.          VALUE = ZERO
  126.          DO 80 I = 1, M
  127.             VALUE = MAX( VALUE, WORK( I ) )
  128.    80    CONTINUE
  129.       ELSE IF( ( LSAME( NORM, 'F' ) ) .OR. ( LSAME( NORM, 'E' ) ) ) THEN
  130. *
  131. *        Find normF(A).
  132. *
  133.          SCALE = ZERO
  134.          SUM = ONE
  135.          DO 90 J = 1, N
  136.             CALL ZLASSQ( M, A( 1, J ), 1, SCALE, SUM )
  137.    90    CONTINUE
  138.          VALUE = SCALE*SQRT( SUM )
  139.       END IF
  140. *
  141.       ZLANGE = VALUE
  142.       RETURN
  143. *
  144. *     End of ZLANGE
  145. *
  146.       END
  147.